import { getServerConfig } from '../ormconfig';
import { NestFastifyApplication } from '@nestjs/platform-fastify';
import rateLimit from '@fastify/rate-limit';
import { setupSwagger } from '@/configuration/setup-swagger.configuration';
import * as fastifyMultipart from '@fastify/multipart';
import fastifyIp from 'fastify-ip';

export const setupApp = async (app: NestFastifyApplication) => {
    const config = getServerConfig();
    console.log('config', config);

    // 设置 api 访问前缀
    if (config.API_PREFIX) {
        app.setGlobalPrefix(<string>config.API_PREFIX);
    }

    // 注册fastify-ip插件
    await app.register(<any>fastifyIp, {
        order: ['x-my-ip-header', 'x-forwarded-for'],
        strict: false, // 即使指定的头不存在，也会尝试其他默认头
        isAWS: false, // 不启用AWS环境的特殊处理
    });
    // 注册 fastify-multipart 插件
    await app.register(<any>fastifyMultipart, {
        attachFieldsToBody: true, // 非文件字段附加到 request.body（必须开启）
        resolveJson: true, // 自动解析 JSON 格式的字符串字段（如 business 是 JSON 字符串时，会自动转成对象）
        limits: {
            fileSize: 1024 * 1024 * 50, // 限制文件大小（50MB，根据需求调整）
        },
    });
    // 注册Fastify速率限制插件
    await app.register(<any>rateLimit, {
        max: 300, // 每个IP限制请求数
        timeWindow: '1 minute', // 时间窗口
    });

    // 注册日志中间件
    // app.use(logger);

    // 初始化Swagger文档 - 确保setupSwagger兼容Fastify
    setupSwagger(app);

    // 如果你需要启用Helmet安全头部
    // 首先安装: pnpm add @fastify/helmet
    // 然后取消下面这行注释
    // await app.register(import('@fastify/helmet'));
};
